package com.hzsparrow.ai.service;

import com.hzsparrow.ai.util.FileUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * 文件服务实现类
 */
@Service
public class FileServiceImpl implements FileService {

    @Value("${ai.file.upload-dir}")
    private String uploadDir;
    
    @Value("${server.servlet.context-path:}")
    private String contextPath;
    
    private final FileUtils fileUtils = new FileUtils();
    
    /**
     * 上传文件
     *
     * @param file 文件对象
     * @return 包含文件信息的Map，包括文件名、文件路径、解析内容等
     * @throws IOException 如果上传或解析过程出错
     */
    @Override
    public Map<String, Object> uploadFile(MultipartFile file) throws IOException {
        // 保存文件到指定目录
        String filePath = FileUtils.saveFile(file, uploadDir);
        
        // 使用新方法解析文件内容
        String content = fileUtils.uploadAndRead(file, uploadDir);
        
        // 获取文件扩展名
        String fileExtension = FileUtils.getFileExtension(file.getOriginalFilename());
        
        // 构建返回结果
        Map<String, Object> result = new HashMap<>();
        result.put("originalFileName", file.getOriginalFilename());
        result.put("fileName", filePath.substring(filePath.lastIndexOf('/') + 1));
        result.put("filePath", filePath);
        result.put("fileUrl", getFileUrl(filePath));
        result.put("fileSize", file.getSize());
        result.put("fileExtension", fileExtension);
        result.put("content", content);
        
        return result;
    }
    
    /**
     * 获取文件的访问URL
     *
     * @param filePath 文件相对路径
     * @return 完整的访问URL
     */
    @Override
    public String getFileUrl(String filePath) {
        // 构建文件访问URL
        String baseUrl = contextPath.isEmpty() ? "" : contextPath;
        return baseUrl + "/uploads/" + filePath;
    }
} 